name: GitHub Actions CI

on:
  pull_request:
  push:
    branches:
      - master
      - develop
      - githubactions*
      - feature/**
      - fix/**
      - pr/**

jobs:
  posix:
    strategy:
      fail-fast: false
      matrix:
        include:
          - name: "TOOLSET=gcc-4.4 CXXSTD=98,0x Job 0"
            buildtype: "boost"
            packages: "g++-4.4 ccache"
            packages_to_remove: ""
            os: "ubuntu-16.04"
            container: "ubuntu:14.04"
            cxx: "g++"
            sources: ""
            llvm_os: ""
            llvm_ver: ""
            toolset: "gcc-4.4"
            cxxstd: "98,0x"
            job_uuid: "b6589fc6ab"
          - name: "TOOLSET=gcc-4.6 CXXSTD=03,0x Job 1"
            buildtype: "boost"
            packages: "g++-4.6 ccache"
            packages_to_remove: ""
            os: "ubuntu-16.04"
            cxx: "g++"
            sources: ""
            llvm_os: ""
            llvm_ver: ""
            toolset: "gcc-4.6"
            cxxstd: "03,0x"
            job_uuid: "356a192b79"
          - name: "TOOLSET=gcc-4.7 CXXSTD=03,11 Job 2"
            buildtype: "boost"
            packages: "g++-4.7 ccache"
            packages_to_remove: ""
            os: "ubuntu-16.04"
            cxx: "g++"
            sources: ""
            llvm_os: ""
            llvm_ver: ""
            toolset: "gcc-4.7"
            cxxstd: "03,11"
            job_uuid: "da4b9237ba"
          - name: "TOOLSET=gcc-4.8 CXXSTD=03,11 Job 3"
            buildtype: "boost"
            packages: "g++-4.8 ccache"
            packages_to_remove: ""
            os: "ubuntu-16.04"
            cxx: "g++"
            sources: ""
            llvm_os: ""
            llvm_ver: ""
            toolset: "gcc-4.8"
            cxxstd: "03,11"
            job_uuid: "77de68daec"
          - name: "TOOLSET=gcc-4.8 CXXSTD=1y Job 4"
            buildtype: "boost"
            packages: "g++-4.8 ccache"
            packages_to_remove: ""
            os: "ubuntu-16.04"
            cxx: "g++"
            sources: ""
            llvm_os: ""
            llvm_ver: ""
            toolset: "gcc-4.8"
            cxxstd: "1y"
            job_uuid: "1b64538924"
          - name: "TOOLSET=gcc-4.9 CXXSTD=03,11 Job 5"
            buildtype: "boost"
            packages: "g++-4.9 ccache"
            packages_to_remove: ""
            os: "ubuntu-16.04"
            cxx: "g++"
            sources: ""
            llvm_os: ""
            llvm_ver: ""
            toolset: "gcc-4.9"
            cxxstd: "03,11"
            job_uuid: "ac3478d69a"
          - name: "TOOLSET=gcc-4.9 CXXSTD=14 Job 6"
            buildtype: "boost"
            packages: "g++-4.9 ccache"
            packages_to_remove: ""
            os: "ubuntu-16.04"
            cxx: "g++"
            sources: ""
            llvm_os: ""
            llvm_ver: ""
            toolset: "gcc-4.9"
            cxxstd: "14"
            job_uuid: "c1dfd96eea"
          - name: "TOOLSET=gcc-5 CXXSTD=03,11 Job 7"
            buildtype: "boost"
            packages: "g++-5 ccache"
            packages_to_remove: ""
            os: "ubuntu-16.04"
            cxx: "g++"
            sources: ""
            llvm_os: ""
            llvm_ver: ""
            toolset: "gcc-5"
            cxxstd: "03,11"
            job_uuid: "902ba3cda1"
          - name: "TOOLSET=gcc-5 CXXSTD=14,17 Job 8"
            buildtype: "boost"
            packages: "g++-5 ccache"
            packages_to_remove: ""
            os: "ubuntu-16.04"
            cxx: "g++"
            sources: ""
            llvm_os: ""
            llvm_ver: ""
            toolset: "gcc-5"
            cxxstd: "14,17"
            job_uuid: "fe5dbbcea5"
          - name: "TOOLSET=gcc-6 CXXSTD=03,11 Job 9"
            buildtype: "boost"
            packages: "g++-6 ccache"
            packages_to_remove: ""
            os: "ubuntu-16.04"
            cxx: "g++"
            sources: ""
            llvm_os: ""
            llvm_ver: ""
            toolset: "gcc-6"
            cxxstd: "03,11"
            job_uuid: "0ade7c2cf9"
          - name: "TOOLSET=gcc-6 CXXSTD=14,17 Job 10"
            buildtype: "boost"
            packages: "g++-6 ccache"
            packages_to_remove: ""
            os: "ubuntu-16.04"
            cxx: "g++"
            sources: ""
            llvm_os: ""
            llvm_ver: ""
            toolset: "gcc-6"
            cxxstd: "14,17"
            job_uuid: "b1d5781111"
          - name: "TOOLSET=gcc-7 CXXSTD=03,11 Job 11"
            buildtype: "boost"
            packages: "g++-7 ccache"
            packages_to_remove: ""
            os: "ubuntu-16.04"
            cxx: "g++"
            sources: ""
            llvm_os: ""
            llvm_ver: ""
            toolset: "gcc-7"
            cxxstd: "03,11"
            job_uuid: "17ba079149"
          - name: "TOOLSET=gcc-7 CXXSTD=14,17 Job 12"
            buildtype: "boost"
            packages: "g++-7 ccache"
            packages_to_remove: ""
            os: "ubuntu-16.04"
            cxx: "g++"
            sources: ""
            llvm_os: ""
            llvm_ver: ""
            toolset: "gcc-7"
            cxxstd: "14,17"
            job_uuid: "7b52009b64"
          - name: "TOOLSET=gcc-8 CXXSTD=03,11 Job 13"
            buildtype: "boost"
            packages: "g++-8 ccache"
            packages_to_remove: ""
            os: "ubuntu-16.04"
            cxx: "g++"
            sources: ""
            llvm_os: ""
            llvm_ver: ""
            toolset: "gcc-8"
            cxxstd: "03,11"
            job_uuid: "bd307a3ec3"
          - name: "TOOLSET=gcc-8 CXXSTD=14,17 Job 14"
            buildtype: "boost"
            packages: "g++-8 ccache"
            packages_to_remove: ""
            os: "ubuntu-16.04"
            cxx: "g++"
            sources: ""
            llvm_os: ""
            llvm_ver: ""
            toolset: "gcc-8"
            cxxstd: "14,17"
            job_uuid: "fa35e19212"
          - name: "TOOLSET=gcc-8 CXXSTD=2a Job 15"
            buildtype: "boost"
            packages: "g++-8 ccache"
            packages_to_remove: ""
            os: "ubuntu-16.04"
            cxx: "g++"
            sources: ""
            llvm_os: ""
            llvm_ver: ""
            toolset: "gcc-8"
            cxxstd: "2a"
            job_uuid: "f1abd67035"
          - name: "TOOLSET=gcc-9 CXXSTD=03,11,14 SANITIZED Job 16"
            buildtype: "boost"
            packages: "g++-9 ccache"
            packages_to_remove: ""
            os: "ubuntu-16.04"
            cxx: "g++"
            sources: ""
            llvm_os: ""
            llvm_ver: ""
            toolset: "gcc-9"
            cxxstd: "03,11,14"
            job_uuid: "1574bddb75"
          - name: "TOOLSET=gcc-9 CXXSTD=17,2a SANITIZED Job 17"
            buildtype: "boost"
            packages: "g++-9 ccache"
            packages_to_remove: ""
            os: "ubuntu-16.04"
            cxx: "g++"
            sources: ""
            llvm_os: ""
            llvm_ver: ""
            toolset: "gcc-9"
            cxxstd: "17,2a"
            job_uuid: "0716d9708d"
          - name: "TOOLSET=clang-3.5 CXXSTD=03,11 Job 18"
            buildtype: "boost"
            packages: "clang-3.5 ccache"
            packages_to_remove: ""
            os: "ubuntu-16.04"
            cxx: "g++"
            sources: ""
            llvm_os: ""
            llvm_ver: ""
            toolset: "clang-3.5"
            cxxstd: "03,11"
            job_uuid: "9e6a55b6b4"
          - name: "TOOLSET=clang-3.6 CXXSTD=03,11 Job 19"
            buildtype: "boost"
            packages: "clang-3.6 ccache"
            packages_to_remove: ""
            os: "ubuntu-16.04"
            cxx: "g++"
            sources: ""
            llvm_os: ""
            llvm_ver: ""
            toolset: "clang-3.6"
            cxxstd: "03,11"
            job_uuid: "b3f0c7f6bb"
          - name: "TOOLSET=clang-3.6 CXXSTD=14,1z Job 20"
            buildtype: "boost"
            packages: "clang-3.6 ccache"
            packages_to_remove: ""
            os: "ubuntu-16.04"
            cxx: "g++"
            sources: ""
            llvm_os: ""
            llvm_ver: ""
            toolset: "clang-3.6"
            cxxstd: "14"
            job_uuid: "91032ad7bb"
          - name: "TOOLSET=clang-3.7 CXXSTD=03,11 Job 21"
            buildtype: "boost"
            packages: "clang-3.7 ccache"
            packages_to_remove: ""
            os: "ubuntu-16.04"
            cxx: "g++"
            sources: ""
            llvm_os: ""
            llvm_ver: ""
            toolset: "clang-3.7"
            cxxstd: "03,11"
            job_uuid: "472b07b9fc"
          - name: "TOOLSET=clang-3.7 CXXSTD=14,1z Job 22"
            buildtype: "boost"
            packages: "clang-3.7 ccache"
            packages_to_remove: ""
            os: "ubuntu-16.04"
            cxx: "g++"
            sources: ""
            llvm_os: ""
            llvm_ver: ""
            toolset: "clang-3.7"
            cxxstd: "14"
            job_uuid: "12c6fc06c9"
          - name: "TOOLSET=clang-3.8 CXXSTD=03,11 Job 23"
            buildtype: "boost"
            packages: "clang-3.8 ccache"
            packages_to_remove: ""
            os: "ubuntu-16.04"
            cxx: "g++"
            sources: ""
            llvm_os: ""
            llvm_ver: ""
            toolset: "clang-3.8"
            cxxstd: "03,11"
            job_uuid: "d435a6cdd7"
          - name: "TOOLSET=clang-3.8 CXXSTD=14,1z Job 24"
            buildtype: "boost"
            packages: "clang-3.8 ccache"
            packages_to_remove: ""
            os: "ubuntu-16.04"
            cxx: "g++"
            sources: ""
            llvm_os: ""
            llvm_ver: ""
            toolset: "clang-3.8"
            cxxstd: "14"
            job_uuid: "4d134bc072"
          - name: "TOOLSET=clang-3.9 CXXSTD=03,11 Job 25"
            buildtype: "boost"
            packages: "clang-3.9 ccache"
            packages_to_remove: ""
            os: "ubuntu-16.04"
            cxx: "g++"
            sources: ""
            llvm_os: ""
            llvm_ver: ""
            toolset: "clang-3.9"
            cxxstd: "03,11"
            job_uuid: "f6e1126ced"
          - name: "TOOLSET=clang-3.9 CXXSTD=14,1z Job 26"
            buildtype: "boost"
            packages: "clang-3.9 ccache"
            packages_to_remove: ""
            os: "ubuntu-16.04"
            cxx: "g++"
            sources: ""
            llvm_os: ""
            llvm_ver: ""
            toolset: "clang-3.9"
            cxxstd: "14"
            job_uuid: "887309d048"
          - name: "TOOLSET=clang-4.0 CXXSTD=03,11 Job 27"
            buildtype: "boost"
            packages: "clang-4.0 ccache"
            packages_to_remove: ""
            os: "ubuntu-16.04"
            cxx: "g++"
            sources: ""
            llvm_os: ""
            llvm_ver: ""
            toolset: "clang-4.0"
            cxxstd: "03,11"
            job_uuid: "bc33ea4e26"
          - name: "TOOLSET=clang-4.0 CXXSTD=14,1z Job 28"
            buildtype: "boost"
            packages: "clang-4.0 ccache"
            packages_to_remove: ""
            os: "ubuntu-16.04"
            cxx: "g++"
            sources: ""
            llvm_os: ""
            llvm_ver: ""
            toolset: "clang-4.0"
            cxxstd: "14"
            job_uuid: "0a57cb53ba"
          - name: "TOOLSET=clang-5.0 CXXSTD=03,11 Job 29"
            buildtype: "boost"
            packages: "clang-5.0 ccache"
            packages_to_remove: ""
            os: "ubuntu-16.04"
            cxx: "g++"
            sources: ""
            llvm_os: "xenial"
            llvm_ver: "5.0"
            toolset: "clang-5.0"
            cxxstd: "03,11"
            job_uuid: "7719a1c782"
          - name: "TOOLSET=clang-5.0 CXXSTD=14,17 Job 30"
            buildtype: "boost"
            packages: "clang-5.0 ccache"
            packages_to_remove: ""
            os: "ubuntu-16.04"
            cxx: "g++"
            sources: ""
            llvm_os: "xenial"
            llvm_ver: "5.0"
            toolset: "clang-5.0"
            cxxstd: "14,17"
            job_uuid: "22d200f867"
          - name: "TOOLSET=clang-5.0 CXXSTD=2a Job 31"
            buildtype: "boost"
            packages: "clang-5.0 ccache"
            packages_to_remove: ""
            os: "ubuntu-16.04"
            cxx: "g++"
            sources: ""
            llvm_os: "xenial"
            llvm_ver: "5.0"
            toolset: "clang-5.0"
            cxxstd: "2a"
            job_uuid: "632667547e"
          - name: "TOOLSET=clang-6.0 CXXSTD=03,11 Job 32"
            buildtype: "boost"
            packages: "clang-6.0 ccache"
            packages_to_remove: ""
            os: "ubuntu-16.04"
            cxx: "g++"
            sources: ""
            llvm_os: "xenial"
            llvm_ver: "6.0"
            toolset: "clang-6.0"
            cxxstd: "03,11"
            job_uuid: "cb4e5208b4"
          - name: "TOOLSET=clang-6.0 CXXSTD=14,17 Job 33"
            buildtype: "boost"
            packages: "clang-6.0 ccache"
            packages_to_remove: ""
            os: "ubuntu-16.04"
            cxx: "g++"
            sources: ""
            llvm_os: "xenial"
            llvm_ver: "6.0"
            toolset: "clang-6.0"
            cxxstd: "14,17"
            job_uuid: "b6692ea5df"
          - name: "TOOLSET=clang-6.0 CXXSTD=2a Job 34"
            buildtype: "boost"
            packages: "clang-6.0 ccache"
            packages_to_remove: ""
            os: "ubuntu-16.04"
            cxx: "g++"
            sources: ""
            llvm_os: "xenial"
            llvm_ver: "6.0"
            toolset: "clang-6.0"
            cxxstd: "2a"
            job_uuid: "f1f836cb4e"
          - name: "TOOLSET=clang-7 CXXSTD=03,11 Job 35"
            buildtype: "boost"
            packages: "clang-7 ccache"
            packages_to_remove: ""
            os: "ubuntu-16.04"
            cxx: "g++"
            sources: ""
            llvm_os: "xenial"
            llvm_ver: "7"
            toolset: "clang-7"
            cxxstd: "03,11"
            job_uuid: "972a67c481"
          - name: "TOOLSET=clang-7 CXXSTD=14,17 Job 36"
            buildtype: "boost"
            packages: "clang-7 ccache"
            packages_to_remove: ""
            os: "ubuntu-16.04"
            cxx: "g++"
            sources: ""
            llvm_os: "xenial"
            llvm_ver: "7"
            toolset: "clang-7"
            cxxstd: "14,17"
            job_uuid: "fc074d5013"
          - name: "TOOLSET=clang-7 CXXSTD=2a Job 37"
            buildtype: "boost"
            packages: "clang-7 ccache"
            packages_to_remove: ""
            os: "ubuntu-16.04"
            cxx: "g++"
            sources: ""
            llvm_os: "xenial"
            llvm_ver: "7"
            toolset: "clang-7"
            cxxstd: "2a"
            job_uuid: "cb7a1d775e"
          - name: "TOOLSET=clang-8 CXXSTD=03,11,14 Job 38"
            buildtype: "boost"
            packages: "clang-8 ccache"
            packages_to_remove: ""
            os: "ubuntu-16.04"
            cxx: "g++"
            sources: ""
            llvm_os: ""
            llvm_ver: ""
            toolset: "clang-8"
            cxxstd: "03,11,14"
            job_uuid: "5b384ce32d"
          - name: "TOOLSET=clang-8 CXXSTD=17,2a Job 39"
            buildtype: "boost"
            packages: "clang-8 ccache"
            packages_to_remove: ""
            os: "ubuntu-16.04"
            cxx: "g++"
            sources: ""
            llvm_os: ""
            llvm_ver: ""
            toolset: "clang-8"
            cxxstd: "17,2a"
            job_uuid: "ca3512f4df"
          - name: "TOOLSET=clang-9 CXXSTD=03,11,14 SANITIZED Job 40"
            buildtype: "boost"
            packages: "clang-9 ccache"
            packages_to_remove: ""
            os: "ubuntu-18.04"
            cxx: "g++"
            sources: ""
            llvm_os: ""
            llvm_ver: ""
            toolset: "clang-9"
            cxxstd: "03,11,14"
            job_uuid: "af3e133428"
          - name: "TOOLSET=clang-9 CXXSTD=17,2a SANITIZED Job 41"
            buildtype: "boost"
            packages: "clang-9 ccache"
            packages_to_remove: ""
            os: "ubuntu-18.04"
            cxx: "g++"
            sources: ""
            llvm_os: ""
            llvm_ver: ""
            toolset: "clang-9"
            cxxstd: "17,2a"
            job_uuid: "761f22b2c1"

    runs-on: ${{ matrix.os }}
    container: ${{ matrix.container }}

    steps:
      - name: Check if running in container
        if: matrix.container != ''
        run: echo "GHA_CONTAINER=${{ matrix.container }}" >> $GITHUB_ENV
      - name: If running in container, upgrade packages
        if: matrix.container != ''
        run: |
            sudo apt-get -o Acquire::Retries=3 update && DEBIAN_FRONTEND=noninteractive apt-get -y install tzdata && apt-get -o Acquire::Retries=3 install -y sudo software-properties-common wget curl apt-transport-https make apt-file sudo unzip libssl-dev build-essential autotools-dev autoconf automake g++ libc++-helpers python python-pip ruby cpio gcc-multilib g++-multilib pkgconf python3 python3-pip ccache libpython-dev
            sudo apt-add-repository ppa:git-core/ppa
            sudo apt-get -o Acquire::Retries=3 update && apt-get -o Acquire::Retries=3 -y install git
            sudo python -m pip install --upgrade pip==20.3.4
            sudo /usr/local/bin/pip install cmake

      - uses: actions/checkout@v2

      - name: linux
        shell: bash
        env:
          CXX: ${{ matrix.cxx }}
          SOURCES: ${{ matrix.sources }}
          LLVM_OS: ${{ matrix.llvm_os }}
          LLVM_VER: ${{ matrix.llvm_ver }}
          PACKAGES: ${{ matrix.packages }}
          PACKAGES_TO_REMOVE: ${{ matrix.packages_to_remove }}
          JOB_BUILDTYPE: ${{ matrix.buildtype }}
          TOOLSET: ${{ matrix.toolset }}
          CXXSTD: ${{ matrix.cxxstd }}
          COMPILER: ${{ matrix.compiler }}
          TRAVIS_BRANCH: ${{ github.base_ref }}
          TRAVIS_OS_NAME: "linux"
          JOB_UUID: ${{ matrix.job_uuid }}
        run: |
          echo '==================================> SETUP'
          echo '==================================> PACKAGES'
          set -e
          if [ -n "$PACKAGES_TO_REMOVE" ]; then sudo apt-get purge -y $PACKAGES_TO_REMOVE; fi
          echo ">>>>> APT: REPO.."
          for i in {1..3}; do sudo -E apt-add-repository -y "ppa:ubuntu-toolchain-r/test" && break || sleep 2; done
          
          if test -n "${LLVM_OS}" ; then
              wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | sudo apt-key add -
              if test -n "${LLVM_VER}" ; then
                  sudo -E apt-add-repository "deb http://apt.llvm.org/${LLVM_OS}/ llvm-toolchain-${LLVM_OS}-${LLVM_VER} main"
              else
                  # Snapshot (i.e. trunk) build of clang
                  sudo -E apt-add-repository "deb http://apt.llvm.org/${LLVM_OS}/ llvm-toolchain-${LLVM_OS} main"
              fi
          fi
          echo ">>>>> APT: UPDATE.."
          sudo -E apt-get -o Acquire::Retries=3 update
          if test -n "${SOURCES}" ; then
              echo ">>>>> APT: INSTALL SOURCES.."
              for SOURCE in $SOURCES; do
                  sudo -E apt-add-repository ppa:$SOURCE
              done
          fi
          echo ">>>>> APT: INSTALL ${PACKAGES}.."
          sudo -E DEBIAN_FRONTEND=noninteractive apt-get -o Acquire::Retries=3 -y --no-install-suggests --no-install-recommends install ${PACKAGES}

          echo '==================================> INSTALL AND COMPILE'
          set -e
          export TRAVIS_BUILD_DIR=$(pwd)
          export TRAVIS_BRANCH=${TRAVIS_BRANCH:-$(echo $GITHUB_REF | awk 'BEGIN { FS = "/" } ; { print $3 }')}
          export VCS_COMMIT_ID=$GITHUB_SHA
          export GIT_COMMIT=$GITHUB_SHA
          export REPO_NAME=$(basename $GITHUB_REPOSITORY)
          export USER=$(whoami)
          export CC=${CC:-gcc}
          export PATH=~/.local/bin:/usr/local/bin:$PATH

          if [ "$JOB_BUILDTYPE" == "boost" ]; then

          echo '==================================> BEFORE_INSTALL'

          . .github/scripts/before-install.sh

          echo '==================================> INSTALL'

          BOOST_BRANCH=develop && [ "$TRAVIS_BRANCH" == "master" ] && BOOST_BRANCH=master || true
          cd ..
          git clone --depth 1 -b $BOOST_BRANCH https://github.com/boostorg/boost.git boost-root
          cd boost-root
          git submodule init libs/algorithm
          git submodule init libs/any
          git submodule init libs/array
          git submodule init libs/assert
          git submodule init libs/assign
          git submodule init libs/atomic
          git submodule init libs/bind
          git submodule init libs/chrono
          git submodule init libs/circular_buffer
          git submodule init libs/concept_check
          git submodule init libs/config
          git submodule init libs/container
          git submodule init libs/container_hash
          git submodule init libs/conversion
          git submodule init libs/core
          git submodule init libs/date_time
          git submodule init libs/detail
          git submodule init libs/endian
          git submodule init libs/exception
          git submodule init libs/filesystem
          git submodule init libs/foreach
          git submodule init libs/format
          git submodule init libs/function
          git submodule init libs/function_types
          git submodule init libs/functional
          git submodule init libs/fusion
          git submodule init libs/integer
          git submodule init libs/intrusive
          git submodule init libs/io
          git submodule init libs/iostreams
          git submodule init libs/iterator
          git submodule init libs/lambda
          git submodule init libs/lexical_cast
          git submodule init libs/locale
          git submodule init libs/log
          git submodule init libs/math
          git submodule init libs/move
          git submodule init libs/mp11
          git submodule init libs/mpl
          git submodule init libs/multi_index
          git submodule init libs/numeric/conversion
          git submodule init libs/optional
          git submodule init libs/parameter
          git submodule init libs/pool
          git submodule init libs/predef
          git submodule init libs/preprocessor
          git submodule init libs/property_tree
          git submodule init libs/proto
          git submodule init libs/ptr_container
          git submodule init libs/python
          git submodule init libs/random
          git submodule init libs/range
          git submodule init libs/ratio
          git submodule init libs/rational
          git submodule init libs/regex
          git submodule init libs/serialization
          git submodule init libs/signals2
          git submodule init libs/smart_ptr
          git submodule init libs/spirit
          git submodule init libs/static_assert
          git submodule init libs/system
          git submodule init libs/thread
          git submodule init libs/throw_exception
          git submodule init libs/tokenizer
          git submodule init libs/tti
          git submodule init libs/tuple
          git submodule init libs/type_index
          git submodule init libs/type_traits
          git submodule init libs/typeof
          git submodule init libs/unordered
          git submodule init libs/utility
          git submodule init libs/variant
          git submodule init libs/winapi
          git submodule init libs/xpressive
          git submodule init libs/headers tools/boost_install tools/build
          git submodule update --jobs 8
          rm -rf libs/phoenix
          cp -rp $TRAVIS_BUILD_DIR libs/phoenix
          ln -s $(pwd)/libs/phoenix $TRAVIS_BUILD_DIR
          ./bootstrap.sh
          ./b2 headers
          if [ $TRAVIS_OS_NAME = osx ]; then
            export PATH="/usr/local/opt/ccache/libexec:$PATH"
            true brew install ccache
          fi

          echo "using ${TOOLSET%%-*} : ${TOOLSET#*-} : ccache `echo $TOOLSET | sed 's/clang/clang++/;s/gcc/g++/'` ;" > ~/user-config.jam

          echo '==================================> SCRIPT'

          ./b2 libs/phoenix/test toolset=$TOOLSET cxxstd=$CXXSTD ${SANITIZED+cxxflags=-fsanitize=address,undefined} ${SANITIZED+'linkflags=-fsanitize=address,undefined -fuse-ld=gold'}

          fi
  osx:
    strategy:
      fail-fast: false
      matrix:
        include:
          - name: "TOOLSET=clang COMPILER=clang++ CXXSTD=03,11 Job 42"
            buildtype: "boost"
            packages: ""
            os: "macos-10.15"
            cxx: "clang++"
            sources: ""
            llvm_os: ""
            llvm_ver: ""
            xcode_version: 11.7
            toolset: "clang"
            compiler: "clang++"
            cxxstd: "03,11"
            job_uuid: "92cfceb39d"
          - name: "TOOLSET=clang COMPILER=clang++ CXXSTD=14,1z Job 43"
            buildtype: "boost"
            packages: ""
            os: "macos-10.15"
            cxx: "clang++"
            sources: ""
            llvm_os: ""
            llvm_ver: ""
            xcode_version: 11.7
            toolset: "clang"
            compiler: "clang++"
            cxxstd: "14,1z"
            job_uuid: "0286dd552c"

    runs-on: ${{ matrix.os }}

    steps:
      - uses: actions/checkout@v2

      - name: Set DEVELOPER_DIR
        if: matrix.xcode_version != ''
        run: echo "DEVELOPER_DIR=/Applications/Xcode_${{ matrix.xcode_version }}.app/Contents/Developer" >> $GITHUB_ENV
      - name: Test DEVELOPER_DIR
        run: echo $DEVELOPER_DIR

      - name: "osx"
        shell: bash
        env:
          CXX: ${{ matrix.cxx }}
          SOURCES: ${{ matrix.sources }}
          LLVM_OS: ${{ matrix.llvm_os }}
          LLVM_VER: ${{ matrix.llvm_ver }}
          PACKAGES: ${{ matrix.packages }}
          JOB_BUILDTYPE: ${{ matrix.buildtype }}
          TOOLSET: ${{ matrix.toolset }}
          CXXSTD: ${{ matrix.cxxstd }}
          COMPILER: ${{ matrix.compiler }}
          TRAVIS_BRANCH: ${{ github.base_ref }}
          TRAVIS_OS_NAME: "osx"
          JOB_UUID: ${{ matrix.job_uuid }}
        run: |
          echo '==================================> SETUP'
          set -e
          sudo mv /Library/Developer/CommandLineTools /Library/Developer/CommandLineTools.bck
          echo '==================================> PACKAGES'
          echo '==================================> INSTALL AND COMPILE'
          set -e
          export TRAVIS_BUILD_DIR=$(pwd)
          export TRAVIS_BRANCH=${TRAVIS_BRANCH:-$(echo $GITHUB_REF | awk 'BEGIN { FS = "/" } ; { print $3 }')}
          export VCS_COMMIT_ID=$GITHUB_SHA
          export GIT_COMMIT=$GITHUB_SHA
          export REPO_NAME=$(basename $GITHUB_REPOSITORY)
          export USER=$(whoami)
          export CC=${CC:-gcc}
          export PATH=~/.local/bin:/usr/local/bin:$PATH

          if [ "$JOB_BUILDTYPE" == "boost" ]; then

          echo '==================================> BEFORE_INSTALL'

          . .github/scripts/before-install.sh

          echo '==================================> INSTALL'

          BOOST_BRANCH=develop && [ "$TRAVIS_BRANCH" == "master" ] && BOOST_BRANCH=master || true
          cd ..
          git clone --depth 1 -b $BOOST_BRANCH https://github.com/boostorg/boost.git boost-root
          cd boost-root
          git submodule init libs/algorithm
          git submodule init libs/any
          git submodule init libs/array
          git submodule init libs/assert
          git submodule init libs/assign
          git submodule init libs/atomic
          git submodule init libs/bind
          git submodule init libs/chrono
          git submodule init libs/circular_buffer
          git submodule init libs/concept_check
          git submodule init libs/config
          git submodule init libs/container
          git submodule init libs/container_hash
          git submodule init libs/conversion
          git submodule init libs/core
          git submodule init libs/date_time
          git submodule init libs/detail
          git submodule init libs/endian
          git submodule init libs/exception
          git submodule init libs/filesystem
          git submodule init libs/foreach
          git submodule init libs/format
          git submodule init libs/function
          git submodule init libs/function_types
          git submodule init libs/functional
          git submodule init libs/fusion
          git submodule init libs/integer
          git submodule init libs/intrusive
          git submodule init libs/io
          git submodule init libs/iostreams
          git submodule init libs/iterator
          git submodule init libs/lambda
          git submodule init libs/lexical_cast
          git submodule init libs/locale
          git submodule init libs/log
          git submodule init libs/math
          git submodule init libs/move
          git submodule init libs/mp11
          git submodule init libs/mpl
          git submodule init libs/multi_index
          git submodule init libs/numeric/conversion
          git submodule init libs/optional
          git submodule init libs/parameter
          git submodule init libs/pool
          git submodule init libs/predef
          git submodule init libs/preprocessor
          git submodule init libs/property_tree
          git submodule init libs/proto
          git submodule init libs/ptr_container
          git submodule init libs/python
          git submodule init libs/random
          git submodule init libs/range
          git submodule init libs/ratio
          git submodule init libs/rational
          git submodule init libs/regex
          git submodule init libs/serialization
          git submodule init libs/signals2
          git submodule init libs/smart_ptr
          git submodule init libs/spirit
          git submodule init libs/static_assert
          git submodule init libs/system
          git submodule init libs/thread
          git submodule init libs/throw_exception
          git submodule init libs/tokenizer
          git submodule init libs/tti
          git submodule init libs/tuple
          git submodule init libs/type_index
          git submodule init libs/type_traits
          git submodule init libs/typeof
          git submodule init libs/unordered
          git submodule init libs/utility
          git submodule init libs/variant
          git submodule init libs/winapi
          git submodule init libs/xpressive
          git submodule init libs/headers tools/boost_install tools/build
          git submodule update --jobs 8
          rm -rf libs/phoenix
          cp -rp $TRAVIS_BUILD_DIR libs/phoenix
          ln -s $(pwd)/libs/phoenix $TRAVIS_BUILD_DIR
          ./bootstrap.sh
          ./b2 headers
          if [ $TRAVIS_OS_NAME = osx ]; then
            export PATH="/usr/local/opt/ccache/libexec:$PATH"
            true brew install ccache
          fi

          echo "using ${TOOLSET%%-*} : ${TOOLSET#*-} : ccache `echo $TOOLSET | sed 's/clang/clang++/;s/gcc/g++/'` ;" > ~/user-config.jam

          echo '==================================> SCRIPT'

          ./b2 libs/phoenix/test toolset=$TOOLSET cxxstd=$CXXSTD ${SANITIZED+cxxflags=-fsanitize=address,undefined} ${SANITIZED+'linkflags=-fsanitize=address,undefined -fuse-ld=gold'}

          fi
